package org.example.pro1.aspects;

import lombok.Value;
import org.aspectj.lang.annotation.*;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Aspect  //表明这是一个切面类
@Component  //将切面类交给Spring容器管理
@Order(1)
public class MyAspects {
    //插入方法  前置通知
    //对addStudent 方法进行增强，在方法执行前进行权限言验证（输出：验证通过即可）
    @Pointcut("execution(* org.example.pro1.service.*.add*(..))")  //切入点表达式
    public void qx(){}
    @Before("qx()")
    public void before(){
        System.out.println("++++++++++++++++++++++");
        System.out.println("权限通过");
        System.out.println("++++++++++++++++++++++");
    }
//---------------------------------------------------------------------
    //后置通知   方法执行后执行
    //对查询操作 操作前，进行日志记录（输出：查询操作）
    @Pointcut("execution(* org.example.pro1.service.*.find*(..))")  //切入点表达式
    public void find(){}
    @Pointcut("execution(* org.example.pro1.service.*.get*(..))")  //切入点表达式
    public void getAll(){}
    @Pointcut("execution(* org.example.pro1.service.*.show*(..))")  //切入点表达式
    public void show(){}
    @After("find() || getAll() || show()")
    public void after(){
        System.out.println("----------------------");
        System.out.println("查询日志===后置通知");
        System.out.println("----------------------");
        System.out.println();
    }

    //返回增强  方法正常返回后执行
    //对查询操作 操作后，进行日志记录（输出：查询操作）
    @AfterReturning(value = "find() || getAll() || show()",returning = "retval")
    public void afterReturning(Object retval){
        System.out.println("++++++++++++++++++++++");
        System.out.println("查询日志===返回增强");
        System.out.println("++++++++++++++++++++++");
    }


}
